package com.best.weiyi.main;

import java.util.ArrayList;
import java.util.List;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.widget.RemoteViews;

import com.best.weiyi.R;
import com.best.weiyi.R.drawable;
import com.best.weiyi.entity.Music;
import com.best.weiyi.util.MusicUtil;

/**
 * 此方法为音乐播放器的一些动作方法，方便以后调用   嘿嘿。。。
 * @author jingang
 *
 */
public class Way{
	//歌曲的总进度
	public static int pubProgress = 0;
	
	public static  MediaPlayer player = new MediaPlayer();
	// 歌曲的位置；
	public static int index = 0;
	// 默认的播放模式，所有播放
	public static int playMode = 0x002;
	//
	public static final class PlayModes{
		// 单曲循环
		public static final int BY_SINGLE = 0x001;
		// 所有循环
		public static final int BY_ALL = 0x002;
		// 随机播放
		public static final int BY_RANDOM = 0x003;
		// 列表播放.
		public static final int BY_LIST = 0x004;
	}
	private Context mContext;
	public static List<Music> music = new ArrayList<Music>();
	
	public Way(Context mContext) {
		super();
		this.mContext = mContext;
		music = MusicUtil.getMusicData(mContext);
	}

	/*//通知
	Notification n;
	RemoteViews views; //远程布局
*/	
	
	
	/**
	 * 返回音乐列表
	 * */
	public List<Music> getMusic(){
		return music;
	}
	/**
	 * 重新播放
	 * *此处MainActivity.sb表示获得每首歌曲的长度
	 * */
	public void play(String path){
		int time = (int) music.get(index).getTime();
		MainActivity.sb.setMax(time);
		try {
			player.reset();
			player.setDataSource(path);
			player.prepare();
			player.start();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 	
		isDone();
	}
	/**
	 * 播放
	 * */
	public void play(){
		player.start();
		isDone();
	}
	/**
	 * 暂停
	 * */
	public void pause(){
		player.pause();
	}
	/**
	 * 停止
	 * */
	public void stop(){
		player.stop();
		MainActivity.playAndPause.setImageAlpha(R.drawable.alarm_pause_btn);
	}
	/**
	 * 上一首 
	 * 注意在获取最大值时（也就是最后一首时，music.size()需要-1）
	 * 不然会报数组越界异常
	 * 在这栽了好长时间。。。
	 * */
	public void theLastOne(){
		if(playMode == PlayModes.BY_RANDOM){
			index = (int) Math.round(Math.random()*(getMusic().size()-1));
		}
		index--;
		if(index < 0){
			index = music.size()-1;
		}
		play(currentPath(index));
		isDone();
	}
	/**
	 * 下一首
	 * */
	public void theNextOne(){
		//判断播放方式  可以写一个方法    后会完善   嘿嘿、、、
		if(playMode == PlayModes.BY_RANDOM){
			index = (int) Math.round(Math.random()*(getMusic().size()-1));
		}
		index++;
		if(index > music.size()-1){
			index = 0;
		}
		play(currentPath(index));
		
		isDone();
	}
	/**
	 * 改变播放进度
	 * */
	public void seekBarTo(int msec){
		player.seekTo(msec);
	}
	/**
	 * 返回当前的播放进度；
	 * */
	public long currentPosition(){
		return player.getCurrentPosition();
	}
	/**
	 * 返回当前歌曲的位置；
	 * */
	public int currentIndex(){
		return index;
	}
	/**
	 * 返回当前歌曲路径； 
	 * */
	public String currentPath(int arg0){
		return music.get(arg0).getUrl();
	}
	
	/**
	 * 是否播放完毕
	 **注：此处的“sb”为主函数（MainActivity）中定义的SeekBar控件
	 * *内含四种播放方式
	 * *包括列表循环、单曲循环、随机播放、顺序播放
	 * */
	public void isDone(){
		player.setOnCompletionListener(new OnCompletionListener() {
			
			@Override
			public void onCompletion(MediaPlayer arg0) {
				// TODO Auto-generated method stub
				
				switch (playMode) {
				case PlayModes.BY_ALL:
					if(index > music.size()){
						index = 0;
					}else if(index < 0){
						index = music.size()-1;
					}
					MainActivity.sb.setProgress(0);
					theNextOne();
					break;
				case PlayModes.BY_SINGLE:
					MainActivity.sb.setProgress(0);
					play();
					break;
				case PlayModes.BY_LIST:
					MainActivity.sb.setProgress(0);
					if(index >= music.size()){
						stop();
					}else{
						theNextOne();
					}
					break;
				case PlayModes.BY_RANDOM:
					MainActivity.sb.setProgress(0);
					index = (int) Math.round(Math.random()*(music.size()-1));
					if(index >= music.size()-1){
						index--;
					}
					theNextOne();
					break;
				
				default:
					break;
				}
			}
		});
	}
	/**
	 * 列表循环
	 */
	public void all(){
		if(index > music.size()){
			index = 0;
		}else if(index < 0){
			index = music.size()-1;
		}
		MainActivity.sb.setProgress(0);
	}
	/**
	 * 单曲循环
	 */
	public void single(){
		MainActivity.sb.setProgress(0);
		play();
	}
	/**
	 * 随机播放
	 */
	public void random(){
		MainActivity.sb.setProgress(0);
		index = (int) Math.round(Math.random()*(music.size()-1));
		if(index > music.size()-1){
			index--;
		}
		theNextOne();
	}
	public void list(){
		if(index > music.size()){
			stop();
		}else{
			theNextOne();
		}
	}
	/*public void makeNotification(){
		Notification n = new Notification();
		NotificationManager nManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
		//设置通知的相关属性
		n.icon = drawable.ic_launcher;  //图标
		n.tickerText = "我是唯依音乐播器"; //通知时的文字
		n.when = System.currentTimeMillis()+3000; //通知的时间
		//远程布局
		RemoteViews views = new RemoteViews(getPackageName(),R.layout.notification_activity);
		
		
		Intent intent = new Intent();
		intent.setAction("com.music.notify");
		//设置一个延迟的Intent 	用来在通知栏点击事件时要做的操作
		PendingIntent pIntent = PendingIntent.getBroadcast(this, 0, intent, flags);
		views.setOnClickPendingIntent(R.id.aaa, pIntent);
		n.contentView = views;
		//把通知设置为常驻通知
		n.flags = Notification.FLAG_ONGOING_EVENT;
		nManager.notify(1,n);
		
	}

	private NotificationManager getSystemService(String notificationService) {
		// TODO Auto-generated method stub
		return null;
	}*/
	
	/*public void showNotiMessage(){
		
		n = new Notification();
		n.icon = R.drawable.ic_launcher;
		// 通知图标；
		n.tickerText = music.get(index).getTitle()+" - "+music.get(index).getSinger();
		// 状态栏闪过的内容；
		n.when = System.currentTimeMillis()+2000;
		// 时间；
		Intent intent = new Intent(Intent.ACTION_MAIN);
		intent.addCategory(Intent.CATEGORY_LAUNCHER);
		intent.setClass(this, PlayerList.class);
		intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
		
		contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
		// 点击通知显示播放器界面；
		
		n.setLatestEventInfo(getApplicationContext(),
							music.get(index).getTitle(),
							music.get(index).getSinger(), 
							contentIntent);
		n.flags = Notification.FLAG_ONGOING_EVENT;
		// 设置通知栏通知为常驻；
		nm.notify(NOTIFICATION_ID_1,n);
		//更新通知信息;
	}*/
	public void showNotification(){
		Notification n = new Notification();
		
	}

}

